﻿<%-- 
    /**************************************************************************
    Sayfa:  QueryString ile gelen rapor referansına göre filtre controlleri, 
    grid ve diğer gerekli nesneleri oluşturarak önceden hazırlanmış rapor 
    verisini filtre ederek görüntülemeye yarar.

        Tarih           Sürüm       Değişiklik          İşlem
        --------------------------------------------------------------------------
        2013.Kas        1           Mehmet A. ORAKCI  Oluşturuldu.
           
    
    ****************************************** mehmetakiforakci@gmail.com ****/
     --%>

<%@ Register Assembly="DevExpress.Web.v12.1, Version=12.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" Namespace="DevExpress.Web.ASPxHeadline" TagPrefix="dx" %>
<%@ Register Assembly="DevExpress.Web.ASPxGridView.v12.1.Export, Version=12.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" Namespace="DevExpress.Web.ASPxGridView.Export" TagPrefix="dx" %>
<%@ Register Assembly="DevExpress.Web.v12.1, Version=12.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" Namespace="DevExpress.Web.ASPxMenu" TagPrefix="dx" %>
<%@ Register Assembly="DevExpress.Web.v12.1, Version=12.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" Namespace="DevExpress.Web.ASPxLoadingPanel" TagPrefix="dx" %>
<%@ Register Assembly="DevExpress.Web.v12.1, Version=12.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" Namespace="DevExpress.Web.ASPxPanel" TagPrefix="dx" %>
<%@ Register Assembly="DevExpress.Web.ASPxGridView.v12.1, Version=12.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" Namespace="DevExpress.Web.ASPxGridView" TagPrefix="dx" %>
<%@ Register Assembly="DevExpress.Web.ASPxEditors.v12.1, Version=12.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" Namespace="DevExpress.Web.ASPxEditors" TagPrefix="dx" %>
<%@ Register Assembly="DevExpress.Web.v12.1, Version=12.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" Namespace="DevExpress.Web.ASPxSplitter" TagPrefix="dx" %>
<%@ Register Assembly="DevExpress.Web.v12.1, Version=12.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" Namespace="DevExpress.Web.ASPxGlobalEvents" TagPrefix="dx" %>
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ReportViewControl.ascx.cs" Inherits="RaporProj.ReportViewControl" %>

<script type="text/javascript">
    // intellisense için referanslar
    /// <reference path="ReportsScript.js" />
    /// <reference path="ReportsTreeControl.ascx" />

    /*******************************************************************/
    // Dinamik olarak oluşturulan "Çalıştır" butonu bu metodu tetikler.
    Report.OnRunReport = function (s, e) {
        LoadingPanel.Show();
        // Bu metot FilterArea.cs sınıfı içinde filtre kontrolleri oluşturulurken render edilir. kullanıcının girdiği filtreleri controllerden okur
        // kontrollerden değerleri okuduktan sonra Report.EndGetValues metodunu çağırarak callback yaptırır.
        Report.GetFieldControlValues(Report.EndGetValues);
    };

    //Kontrollerden değerler okuma işi bittiğinde json formatında grid'e gönderilir. filtrelere göre data gride bind edilecek
    Report.EndGetValues = function () {
        var f = JSON.stringify(Filter);// return Filter controls values as JSon
        ReportGrid.PerformCallback(f); // server side ReportGrid_CustomCallback'i çağırır
    }

    // Grid'in ajax callback işlemi bittiğinde...
    Report.Grid_EndCallback = function (s, e) {
        AdjustGridSize();
        LoadingPanel.Hide();
    }
    /*******************************************************************/
    // Grid oluştuğunda yeniden boyutlandır
    function Grid_OnInit(s, e) {
        AdjustGridSize();
    }
    // browser boyutu değiştiriğinde gridin yüksekliğini tekrar ayarla
    function OnControlsInitialized(s, e) {
        ASPxClientUtils.AttachEventToElement(window, "resize", function (evt) {
            AdjustGridSize();
        });
    }
    //gridin yüksekliğini ayarla
    function AdjustGridSize() {
        var height = Math.max(0, ReportViewMainSplitter.GetPane(1).GetClientHeight()); //Alt panelin yüksekliğini al
        ReportGrid.SetHeight(height);
    }
    /*******************************************************************/
    function ReportToolBar_ItemClick(s, e) {
        if (e.item.name == "Fullscreen") {
            return false;
        }
        else if (e.item.name == "Clear") {
            return false;
        }
        else if (e.item.name == "Close") {
            window.location.href = "?";
        }
        else if (e.item.name == "Run") {
            Report.OnRunReport(s, e);
        }
    }
    /*******************************************************************/
</script>

<dx:ASPxSplitter ID="ReportViewMainSplitter" ClientInstanceName="ReportViewMainSplitter" runat="server" Orientation="Vertical" FullscreenMode="True" Height="100%" Width="100%" SeparatorSize="2px" SeparatorVisible="False">
    <Panes>
        <dx:SplitterPane MaxSize="350px" MinSize="200px" Size="120px">
            <ContentCollection>
                <dx:SplitterContentControl runat="server">
                    <%--<div class="headerarea">
                        <dx:ASPxLabel ID="ReportNavText" ClientInstanceName="ReportNavText" runat="server" CssClass="header1" Text="">
                        </dx:ASPxLabel>
                    </div>--%>
                    <%-- Rapor başlığıdır. Bu markup'ın en altındaki script ile başlık set edilir. --%>
                    <dx:ASPxHeadline ID="ReportHeadline" runat="server"
                        ContentText="Bu rapor için bu alanda raporla ilgili kısa bilgiler veya raporun ne işe yaradığını anlatan açıklamalar girilebilir. Bu bilgi veritabanındaki Report tablosunun HelpText kolonunda tutulabilir."
                        HeaderText="document.getElementsByClassName('dxhlHeader_Aqua')[0] className' Theme adı yazılıdır. Theme değişirse bunun güncellenmesi lazım">
                        <Image Url="ReportImages/document_32.png">
                        </Image>
                        <ContentStyle>
                            <Paddings PaddingBottom="12px" />
                        </ContentStyle>
                    </dx:ASPxHeadline>
                    <dx:ASPxPanel ID="FilterAreaPanel" runat="server" Width="100%">
                        <PanelCollection>
                            <dx:PanelContent runat="server" ID="fieldcontrolArea">
                                <%-- Filtre kontrolleri dinamik olarak bu alana ekleniyor--%>
                            </dx:PanelContent>
                        </PanelCollection>
                    </dx:ASPxPanel>
                    <div style="padding-top: 10px; padding-bottom: 10px">
                        <table>
                            <tr>
                                <td>
                                    <%-- Dosyaya export etmek için gerekli butonların menüsü (postback yapar) --%>
                                    <dx:ASPxMenu ID="ReportExportToolBar" runat="server" OnItemClick="ReportExportToolBar_ItemClick">
                                        <Items>
                                            <dx:MenuItem Text="Excel" Name="Xls" ToolTip=".xlsx dosyasına aktar">
                                                <Image Url="../ReportImages/xls.png"></Image>
                                            </dx:MenuItem>
                                            <dx:MenuItem Text="" Name="Pdf" ToolTip=".pdf dosyasına aktar">
                                                <Image Url="../ReportImages/pdf.png"></Image>
                                            </dx:MenuItem>
                                            <dx:MenuItem Text="" Name="Rtf" ToolTip=".doc dosyasına aktar">
                                                <Image Url="../ReportImages/word.png"></Image>
                                            </dx:MenuItem>
                                            <dx:MenuItem Text="" Name="Csv" ToolTip=".csv dosyasına aktar">
                                                <Image Url="../ReportImages/csv.png"></Image>
                                            </dx:MenuItem>
                                        </Items>
                                        <ClientSideEvents ItemClick="ReportToolBar_ItemClick" />
                                    </dx:ASPxMenu>
                                </td>
                                <td>
                                    <%-- Dİğer yardımcı client side işlemleri içeren menü --%>
                                    <dx:ASPxMenu ID="ReportToolBar" runat="server" AutoPostBack="false">
                                        <Items>
                                            <dx:MenuItem Text="Temizle" Name="Clear" ToolTip="Filtre alanlarını temizle">
                                                <Image Url="../ReportImages/clear.png"></Image>
                                            </dx:MenuItem>
                                            <dx:MenuItem Text="" Name="Close" ToolTip="Raporu kapat">
                                                <Image Url="../ReportImages/out.png"></Image>
                                            </dx:MenuItem>
                                            <dx:MenuItem Text="" Enabled="false"></dx:MenuItem>
                                            <dx:MenuItem Text="Çalıştır" Name="Run" >
                                                <Image Url="../ReportImages/run.png"></Image>
                                            </dx:MenuItem>
                                        </Items>
                                        <ClientSideEvents ItemClick="ReportToolBar_ItemClick" />
                                    </dx:ASPxMenu>
                                </td>
                            </tr>
                        </table>
                    </div>
                </dx:SplitterContentControl>
            </ContentCollection>
        </dx:SplitterPane>
        <dx:SplitterPane PaneStyle-Paddings-Padding="0">
            <PaneStyle>
                <Paddings Padding="0px"></Paddings>
            </PaneStyle>
            <ContentCollection>
                <dx:SplitterContentControl runat="server" ID="GridArea">

                    <%-- Veriyi dosyaya export etmek için gerekli --%>
                    <dx:ASPxGridViewExporter ID="ReportGridExporter" runat="server" GridViewID="ReportGrid">
                    </dx:ASPxGridViewExporter>

                    <%-- Rapor verisinin göründüğü grid. --%>
                    <dx:ASPxGridView ID="ReportGrid" ClientInstanceName="ReportGrid" runat="server" Width="100%"
                        OnCustomCallback="ReportGrid_CustomCallback" KeyFieldName="ReportId">
                        <ClientSideEvents EndCallback="Report.Grid_EndCallback" Init="Grid_OnInit" />
                        <Settings ShowFilterRow="true" ShowGroupPanel="true" ShowVerticalScrollBar="true" />

                        <SettingsLoadingPanel Mode="ShowOnStatusBar" />
                        <SettingsPager Mode="ShowPager" PageSize="30" />
                        <SettingsBehavior AllowDragDrop="true" AllowSort="true" AllowGroup="true" EnableRowHotTrack="true" ColumnResizeMode="Control" />
                        <GroupSummary>
                            <dx:ASPxSummaryItem FieldName="ReportId" SummaryType="Count" />
                        </GroupSummary>
                        <TotalSummary>
                            <dx:ASPxSummaryItem FieldName="ReportId" SummaryType="Count" />
                        </TotalSummary>
                        <Border BorderStyle="None" />
                    </dx:ASPxGridView>

                    <%-- Grid'in yüksekliğini ayarlamak için gerekli --%>
                    <dx:ASPxGlobalEvents ID="ge" runat="server">
                        <ClientSideEvents ControlsInitialized="OnControlsInitialized" />
                    </dx:ASPxGlobalEvents>

                </dx:SplitterContentControl>
            </ContentCollection>
        </dx:SplitterPane>
    </Panes>
</dx:ASPxSplitter>

<%-- Rapor verisi görüntülemek için çalıştırıldığında, veri gelene kadar ekranda "Yükleniyor.. " filan yazar. --%>
<dx:ASPxLoadingPanel ID="LoadingPanel" ClientInstanceName="LoadingPanel" runat="server" Modal="true" 
    ContainerElementID="ReportViewMainSplitter" 
    Text="Yükleniyor, lütfen bekleyin...">
</dx:ASPxLoadingPanel>

<script type="text/javascript">
    var he = document.getElementsByClassName('dxhlHeader_Aqua')[0];
    he.innerText = Report.CategoryName + " > " + Report.Name;
</script>

